<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>

  <script>
      function divide(x, y) {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            if (y == 0) {
              reject(new Error('0除错误'))
            } else {
              resolve(x / y)
            }
          }, 3000);
        })
      }

      divide(3, 2).then((result) => {
        console.log('结果：' + result)
      }).catch((e) => {
        console.error(e)
      })

      divide(3, 0).then((result) => {
        console.log('结果：' + result)
      }).catch((e) => {
        console.error(e)
      })

      // 一下演示一个包装的例子
      divide(3, -1).then((result) => {
        console.log('结果：' + result)
        if (result < 0) {
          throw new Error('不支持负数相除')
        }
      }).catch((e) => {
        console.error(e)
      }).then((result) => {
        console.log('第二次结果：' + result)
      })

      // 执行链详解
      Promise.resolve('功能开发完成').then((result) => {
        console.log(result)
        return '自测完成，提交代码' // 自测
      }).then((result) => { // 自测通过
        console.log(result)
        return Promise.reject('代码审查不通过，出现了NPE异常') // 代码审查
      }).catch((e) => { // 审查不通过
        console.error(e)
        return 'NPE异常已修复，重新提交代码' // 修复异常
      }).catch((e) => {
        console.error(e)
      }).then((e) => { // 审查通过
        console.log(e)
        return '代码审查通过，测试人员开始测试' // 代码审查2
      }).then((result) => { // 第二次审查通过
        console.log(result)
        return Promise.reject('测试发现BUG') // 测试
      }).then((result) => { // 测试通过
        console.log(result)
      }).catch((e) => { // 测试不通过
        console.error(e)
        return '修复BUG' // 修复BUG
      }).then((result) => { // BUG修复成功
        console.log(result)
        return 'BUG修复完成，重新测试'
      }).then((result) => { // 第二次测试成功
        console.log(result)
        return '测试通过'
      }).then((result) => {
        console.log(result)
      })
  </script>
  
</body>
</html>
